import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { JwtModule } from '@nestjs/jwt';
import { JWT } from 'src/constants';
import { AuthGuard } from './auth.guard';
import { APP_GUARD } from '@nestjs/core';
import { UserModule } from 'src/user/user.module';

@Module({
  imports: [
    // 配置 Jwt
    JwtModule.register({
      // global开启后表示全局引入，其他模块可以直接注入，不需要再次导入
      // 虽然JwtModule是由AuthModule引入的，但是 AppModule也加载了AuthModule
      // 那么就相当于AppModule间接引入了JwtModule，使之全局有效了
      global: true,
      secret: JWT.secret,
      // 有效时间 7 天
      signOptions: { expiresIn: JWT.expiresIn },
      // signOptions: { expiresIn: '60s' },
    }),
    UserModule,
  ],
  controllers: [AuthController],
  providers: [
    AuthService,
    // 由于 app.module.ts 中 imports 会引入所有 模块，当然当前auth也不例外
    // 那么只需要注册一次 APP_GUARD、AuthGuard 到 providers 中，即全局就可以生效了
    // 并且无需`@UseGuards(AuthGuard)`在每个控制器顶部使用装饰器，只需用装饰器 Public() 标记哪些路由应公开即可。
    {
      provide: APP_GUARD,
      useClass: AuthGuard,
    },
  ],
})
export class AuthModule {}
